# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/qcom,wcd934x.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Bindings for Qualcomm WCD9340/WCD9341 Audio Codec

maintainers:
  - Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

description: |
  Qualcomm WCD9340/WCD9341 Codec is a standalone Hi-Fi audio codec IC.
  It has in-built Soundwire controller, pin controller, interrupt mux and
  supports both I2S/I2C and SLIMbus audio interfaces.

properties:
  compatible:
    const: slim217,250

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  reset-gpios:
    description: GPIO spec for reset line to use
    maxItems: 1

  slim-ifc-dev: true

  clocks:
    maxItems: 1

  clock-names:
    const: extclk

  vdd-buck-supply:
    description: A reference to the 1.8V buck supply

  vdd-buck-sido-supply:
    description: A reference to the 1.8V SIDO buck supply

  vdd-rx-supply:
    description: A reference to the 1.8V rx supply

  vdd-tx-supply:
    description: A reference to the 1.8V tx supply

  vdd-vbat-supply:
    description: A reference to the vbat supply

  vdd-io-supply:
    description: A reference to the 1.8V I/O supply

  vdd-micbias-supply:
    description: A reference to the micbias supply

  qcom,micbias1-microvolt:
    description: micbias1 voltage
    minimum: 1800000
    maximum: 2850000

  qcom,micbias2-microvolt:
    description: micbias2 voltage
    minimum: 1800000
    maximum: 2850000

  qcom,micbias3-microvolt:
    description: micbias3 voltage
    minimum: 1800000
    maximum: 2850000

  qcom,micbias4-microvolt:
    description: micbias4 voltage
    minimum: 1800000
    maximum: 2850000

  clock-output-names:
    const: mclk

  clock-frequency:
    description: Clock frequency of output clk in Hz

  interrupt-controller: true

  '#interrupt-cells':
    const: 1

  '#clock-cells':
    const: 0

  '#sound-dai-cells':
    const: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 1

  gpio@42:
    type: object
    $ref: ../gpio/qcom,wcd934x-gpio.yaml#

patternProperties:
  "^.*@[0-9a-f]+$":
    type: object
    description: |
      WCD934x subnode for each slave devices. Bindings of each subnodes
      depends on the specific driver providing the functionality and
      documented in their respective bindings.

    properties:
      reg:
        maxItems: 1

    required:
      - reg

required:
  - compatible
  - reg
  - reset-gpios
  - slim-ifc-dev
  - interrupts
  - interrupt-controller
  - clock-frequency
  - clock-output-names
  - qcom,micbias1-microvolt
  - qcom,micbias2-microvolt
  - qcom,micbias3-microvolt
  - qcom,micbias4-microvolt
  - "#interrupt-cells"
  - "#clock-cells"
  - "#sound-dai-cells"
  - "#address-cells"
  - "#size-cells"

additionalProperties: false

examples:
  - |
    codec@1,0{
        compatible = "slim217,250";
        reg  = <1 0>;
        reset-gpios = <&tlmm 64 0>;
        slim-ifc-dev  = <&wcd9340_ifd>;
        #sound-dai-cells = <1>;
        interrupt-parent = <&tlmm>;
        interrupts = <54 4>;
        interrupt-controller;
        #interrupt-cells = <1>;
        #clock-cells = <0>;
        clock-frequency = <9600000>;
        clock-output-names = "mclk";
        qcom,micbias1-microvolt = <1800000>;
        qcom,micbias2-microvolt = <1800000>;
        qcom,micbias3-microvolt = <1800000>;
        qcom,micbias4-microvolt = <1800000>;
        clock-names = "extclk";
        clocks = <&rpmhcc 2>;

        #address-cells = <1>;
        #size-cells = <1>;

        gpio@42 {
            compatible = "qcom,wcd9340-gpio";
            reg = <0x42 0x2>;
            gpio-controller;
            #gpio-cells = <2>;
        };
    };

...
